home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / c / mig / RCS / Mig_GetInfo.c,v < prev    next >
Text File  |  1990-06-22  |  6KB  |  278 lines

  1. head     2.1;
  2. branch   ;
  3. access   ;
  4. symbols  no-auto-remigrate:2.1 installed:2.0;
  5. locks    ; strict;
  6. comment  @ * @;
  7.  
  8.  
  9. 2.1
  10. date     90.06.22.14.58.23;  author douglis;  state Exp;
  11. branches ;
  12. next     2.0;
  13.  
  14. 2.0
  15. date     90.03.10.13.12.50;  author douglis;  state Stable;
  16. branches ;
  17. next     1.3;
  18.  
  19. 1.3
  20. date     90.03.10.13.11.16;  author douglis;  state Exp;
  21. branches ;
  22. next     1.2;
  23.  
  24. 1.2
  25. date     90.02.28.10.58.07;  author douglis;  state Exp;
  26. branches ;
  27. next     1.1;
  28.  
  29. 1.1
  30. date     90.02.16.14.29.24;  author douglis;  state Exp;
  31. branches ;
  32. next     ;
  33.  
  34.  
  35. desc
  36. @Source code for the Mig_GetInfo procedure, which gets migration
  37. and load information for a particular host.  Note: if getting
  38. local information, the "state" of the machine is not guaranteed to
  39. be accurate; this variant is provided just for getting updated load
  40. averages periodically.  
  41. @
  42.  
  43.  
  44. 2.1
  45. log
  46. @changes for alarms for timeouts with migd and for printing to stderr instead of syslog
  47. @
  48. text
  49. @/* 
  50.  * Mig_GetInfo.c --
  51.  *
  52.  *    Source code for the Mig_GetInfo procedure, which gets migration
  53.  *    and load information for a particular host.  Note: if getting
  54.  *    local information, the "state" of the machine is not guaranteed to
  55.  *    be accurate; this variant is provided just for getting updated load
  56.  *    averages periodically.  
  57.  *
  58.  * Copyright 1990 Regents of the University of California
  59.  * Permission to use, copy, modify, and distribute this
  60.  * software and its documentation for any purpose and without
  61.  * fee is hereby granted, provided that the above copyright
  62.  * notice appear in all copies.  The University of California
  63.  * makes no representations about the suitability of this
  64.  * software for any purpose.  It is provided "as is" without
  65.  * express or implied warranty.
  66.  */
  67.  
  68. #ifndef lint
  69. static char rcsid[] = "$Header: /sprite/src/lib/c/mig/RCS/Mig_GetInfo.c,v 2.0 90/03/10 13:12:50 douglis Stable Locker: douglis $ SPRITE (Berkeley)";
  70. #endif not lint
  71.  
  72. #include <sprite.h>
  73. #include <stdio.h>
  74. #include <mig.h>
  75. #include <kernel/net.h>
  76. #include <errno.h>
  77.  
  78. extern int errno;
  79. extern char *strerror();
  80. extern char *malloc();
  81.  
  82.  
  83. /*
  84.  *----------------------------------------------------------------------
  85.  *
  86.  * Mig_GetInfo --
  87.  *
  88.  *    Get the record for the given host (PROC_MY_HOSTID implies the current
  89.  *     host).
  90.  *
  91.  * Results:
  92.  *    A pointer to a static area (valid until the next call to Mig_GetInfo)
  93.  *    is returned if the call is successful.  On error, NULL is returned.
  94.  *
  95.  * Side effects:
  96.  *    None.
  97.  *
  98.  *----------------------------------------------------------------------
  99.  */
  100.  
  101. #define INFO_BUF_SIZE (2 * sizeof(int) + sizeof(Mig_Info))
  102. Mig_Info *
  103. Mig_GetInfo(hostID)
  104.     int hostID;
  105. {
  106.     int status;
  107.     Mig_InfoRequest request;
  108.     static Mig_Info info;    /* Migration data, returned to user. */
  109.     static char *buffer = NULL;
  110.     int retry = 1;
  111.  
  112.     if (hostID == PROC_MY_HOSTID) {
  113.     if (mig_LocalPdev < 0) {
  114.         if (MigOpenPdev(FALSE) < 0) {
  115.         return((Mig_Info *) NULL);
  116.         }
  117.     }
  118.     while (retry >= 0) {
  119.         status = read(mig_LocalPdev, (char *) &info, sizeof(Mig_Info));
  120.         if (status != sizeof(Mig_Info)) {
  121.         close(mig_LocalPdev);
  122.         mig_LocalPdev = -1;
  123.         if (retry == 0 || MigOpenPdev(FALSE) < 0) {
  124.             fprintf(stderr,
  125.                "Mig_GetInfo: error reading load from migd: %s\n",
  126.                strerror(errno));
  127.             return((Mig_Info *) NULL);
  128.         }
  129.         retry--;
  130.         } else {
  131.         break;
  132.         }
  133.     }
  134.     } else {
  135.     if (mig_GlobalPdev < 0) {
  136.         if (MigOpenPdev(TRUE) < 0) {
  137.         return((Mig_Info *) NULL);
  138.         }
  139.     }
  140.     if (buffer == (char *) NULL) {
  141.         buffer = malloc(INFO_BUF_SIZE);
  142.         if (buffer == (char *) NULL) {
  143.         /*
  144.          * Out of memory?!
  145.          */
  146.         return((Mig_Info *) NULL);
  147.         }
  148.     }
  149.     request.numRecs = 1;
  150.     request.firstHost = hostID;
  151.     while (retry >= 0) {
  152.         if (MigSetAlarm() < 0) {
  153.         fprintf(stderr,
  154.             "Error setting alarm for contact with migd.\n");
  155.         return((Mig_Info *) NULL);
  156.         }
  157.         status = Fs_IOControl(mig_GlobalPdev, IOC_MIG_GETINFO,
  158.                   sizeof(Mig_InfoRequest),
  159.                   (char *) &request,
  160.                   INFO_BUF_SIZE, (char *) buffer);
  161.         if (MigClearAlarm() < 0) {
  162.         fprintf(stderr,
  163.             "Error clearing alarm for contact with migd.\n");
  164.         }
  165.         if (status != SUCCESS) {
  166.         close(mig_GlobalPdev);
  167.         mig_GlobalPdev = -1;
  168.         if (retry == 0 || MigOpenPdev(TRUE) < 0) {
  169.             fprintf(stderr,
  170.                "Mig_GetInfo: error during ioctl to global master: %s\n",
  171.                Stat_GetMsg(status));
  172.             errno = Compat_MapCode(status);
  173.             return((Mig_Info *) NULL);
  174.         }
  175.         retry--;
  176.         } else {
  177.         break;
  178.         }
  179.     }
  180.     if (*((int *) buffer) != 1) {
  181.         fprintf(stderr,
  182.            "Mig_GetInfo: Got %d hosts during ioctl to global master.\n",
  183.            *((int *) buffer));
  184.         return((Mig_Info *) NULL);
  185.     }
  186.     bcopy(buffer + 2 * sizeof(int), (char *) &info,
  187.           sizeof(Mig_Info));
  188.     }
  189.     return(&info);
  190. }
  191.  
  192. @
  193.  
  194.  
  195. 2.0
  196. log
  197. @Changing version numbers.
  198. @
  199. text
  200. @d21 1
  201. a21 1
  202. static char rcsid[] = "$Header: /sprite/src/lib/c/mig/RCS/Mig_GetInfo.c,v 1.3 90/03/10 13:11:16 douglis Exp Locker: douglis $ SPRITE (Berkeley)";
  203. d25 1
  204. a26 1
  205. #include <syslog.h>
  206. d76 1
  207. a76 1
  208.             syslog(LOG_WARNING,
  209. d104 5
  210. d113 4
  211. d121 1
  212. a121 1
  213.             syslog(LOG_WARNING,
  214. d133 1
  215. a133 1
  216.         syslog(LOG_WARNING,
  217. @
  218.  
  219.  
  220. 1.3
  221. log
  222. @changed when it prints syslog message
  223. @
  224. text
  225. @d21 1
  226. a21 1
  227. static char rcsid[] = "$Header: /sprite/src/lib/c/mig/RCS/Mig_GetInfo.c,v 1.2 90/02/28 10:58:07 douglis Exp Locker: douglis $ SPRITE (Berkeley)";
  228. @
  229.  
  230.  
  231. 1.2
  232. log
  233. @changed Mig_OpenPdev to internal Mig routine.  retry after read of local
  234. pdev fails.
  235. @
  236. text
  237. @d21 1
  238. a21 1
  239. static char rcsid[] = "$Header: /sprite/src/lib/c/mig/RCS/Mig_GetInfo.c,v 1.1 90/02/16 14:29:24 douglis Exp Locker: douglis $ SPRITE (Berkeley)";
  240. a72 3
  241.         syslog(LOG_WARNING,
  242.                "Mig_GetInfo: error reading load from migd: %s\n",
  243.                strerror(status));
  244. d76 3
  245. a78 1
  246.             errno = Compat_MapCode(status);
  247. a108 3
  248.         syslog(LOG_WARNING,
  249.                "Mig_GetInfo: error during ioctl to global master: %s\n",
  250.                Stat_GetMsg(status));
  251. d112 3
  252. @
  253.  
  254.  
  255. 1.1
  256. log
  257. @Initial revision
  258. @
  259. text
  260. @d21 1
  261. a21 1
  262. static char rcsid[] = "$Header: /user2/douglis/pdev_mig/mig_p/RCS/Mig_GetInfo.c,v 1.2 90/02/13 10:07:12 douglis Exp Locker: douglis $ SPRITE (Berkeley)";
  263. d66 1
  264. a66 1
  265.         if (Mig_OpenPdev(FALSE) < 0) {
  266. d70 16
  267. a85 3
  268.     status = read(mig_LocalPdev, (char *) &info, sizeof(Mig_Info));
  269.     if (status != sizeof(Mig_Info)) {
  270.         return((Mig_Info *) NULL);
  271. d89 1
  272. a89 1
  273.         if (Mig_OpenPdev(TRUE) < 0) {
  274. d115 1
  275. a115 1
  276.         if (retry == 0 || Mig_OpenPdev(TRUE) < 0) {
  277. @
  278.